package com.ni.learning.exam.service;

import com.ni.learning.exam.dto.AnswerInfoDTO;
import com.our.learning.infrastructure.po.AnswerInfo;
import com.our.learning.infrastructure.po.AnswerSheet;
import com.our.learning.infrastructure.pojo.Response;

import java.util.List;

/**
 * 答题卡服务
 * @author : Ice'Clean
 * @date : 2023-06-24
 */
public interface AnswerSheetService {
    /**
     * 根据答卷 ID 获取答卷
     * @param sheetId 答卷 ID
     * @return 答卷实体
     */
    AnswerSheet getAnswerSheetById(int sheetId);

    /**
     * 获取学生在指定考试的答卷
     * @param studentId 学生 Id
     * @param examId 考试 ID
     * @return 答卷实体
     */
    AnswerSheet getAnswerSheetByStudentExam(int studentId, int examId);

    /**
     * 获取学生在指定试卷的答卷
     * @param studentId 学生 Id
     * @param paperId 试卷 ID
     * @return 答卷实体
     */
    AnswerSheet getAnswerSheetByStudentPaper(int studentId, int paperId);

    /**
     * 获取学生所有的答卷
     * @param studentId 学生 ID
     * @return 答卷列表
     */
    List<AnswerSheet> getAnswerSheetByStudent(int studentId);

    /**
     * 为学生发放在指定考试的答题卡
     * @param studentId 学生 ID
     * @param examId 考试 ID
     * @param paperId 试卷 ID
     * @return 答题卡实体
     */
    AnswerSheet createAnswerSheet(int studentId, int examId, int paperId);

    /**
     * 获取学生某张试卷的所有错题 ID
     * @param studentId 学生 Id
     * @param paperId 试卷 ID
     * @return 错题 ID 集合
     */
    List<Integer> getIncorrectIds(int studentId, Integer paperId);

    /**
     * 考试提交一题的答案
     * @param answerInfoDTO 答案信息
     * @return 提交结果
     */
    Response submitAnswer(AnswerInfoDTO answerInfoDTO);

    /**
     * 获取学生答题卡上某一题的答案
     * @param sheetId 答题卡 ID
     * @param titleNo 题目 ID
     * @return 答案信息
     */
    AnswerInfo getSheetAnswer(int sheetId, int titleNo);

    /**
     * 教师提交评分
     * @param answerInfoDTO 答案于评分信息
     * @return 评分结果
     */
    Response submitCheck(AnswerInfoDTO answerInfoDTO);

    /**
     * 获取指定考试的所有答题卡
     * @param examId 考试 ID
     * @return 答题卡列表
     */
    Response sheetList(int examId);

    /**
     * 教师提交批改结果
     * @param sheetId 答题卡 ID
     * @return 提交反馈
     */
    Response submitCheckResult(int sheetId);
}
